<?php

namespace App\Models\traits;

use Illuminate\Support\Facades\Auth;

trait Search
{
    public static function searchFields($data)
    {
//        接受一个数组，数组的key是字段，value是搜索内容，返回一个查询构造器,如果value没有值，则忽略
        $query = self::query();
        foreach ($data as $key => $value) {
            if (!is_null($value) && $key !== 'page') {
                $query->where($key, 'like', "%{$value}%");
            }
        }
//添加搜索日志，判断如果data中的key除了page之外，其他的都是搜索字段，value是搜索内容
        $search_content = '';
        foreach ($data as $key => $value) {
            if (!is_null($value) && $key !== 'page') {
                $search_content .= $key . ':' . $value . ',';
            }
        }

        if ($search_content !== '') {
            Auth::user()->logs()->create(['type' => "search", 'content' => $search_content]);
        }
        return $query;
    }

//    精确搜索
    public static function exactSearchField($data)
    {
//        接受一个数组，数组的key是字段，value是搜索内容，返回一个查询构造器,如果value没有值，则忽略
        $query = self::query();
        //判断字段order和prop是否存在，如果存在则按照字段prop的值进行order排序，order的值为ascending表示升序，descending表示降序
        $queryArr=[
            "prop"=>"start_at",
            "order"=>"asc"
        ];
        foreach ($data as $key => $value) {
//            判断查询的列
            if (!is_null($value) && $key !== 'page'&& $key !== 'prop'&& $key !== 'order'&& $key !== 'user_name') {
                $query->where($key, '=', $value);
            }
//            判断查询的排序
            if ($key == 'prop') {
                if(!is_null($data['prop'])){
                    $queryArr['prop']=$data['prop'];
                }
            }
            if($key=='order'){
                if(!is_null($data['order'])){
                    $queryArr['order']=$data['order']=="ascending"?"asc":"desc";
                }
            }
        }
        $query->Orderby($queryArr['prop'], $queryArr['order']);

        return $query;
    }
}
